home *** CD-ROM | disk | FTP | other *** search
/ PCMania 64 / PCMania CD64_1.iso / phy / phy004 / files / articulo.t09 < prev    next >
Encoding:
Text File  |  1996-11-14  |  7.3 KB  |  159 lines

  1. εTÉCNICAS VIRICASπ
  2. ε----------------π
  3.  
  4.         Güeno, seguimos con nuestro cursillo (ejem) de técnicas víricas. Este
  5. número nos dedicaremos a una nimiedad (es que no tenía ganas de hacerlo muy
  6. largo), y son... ¡técnicas antiheurísticas!
  7.  
  8.         La verdad es que esto es bien fácil, pero daré algunos truquillos para
  9. que no tengais que pensarlos vosotros... vaguillos!
  10.  
  11.         Bien, vamos a guiarnos por las banderas del δThunderByteπ, que es uno de
  12. los mejores anti-virus que hay (a mi juicio). Si detectamos un virus con este,
  13. nos dará diferentes banderas o "Ωflagsπ", que es lo que se intenta evitar.
  14.  
  15.         Una de las más importantes es el flag "δLπ", que nos dice que el progra-
  16. ma captura la ejecución de software. Esto lo hacen los virus para infectar por
  17. ejecución, como sabréis, y en concreto se hace esto:
  18.  
  19.  
  20. ΓNuevaInt21h:            CMP     AX, 4B00h   φ; Función en la int 21h que ejecu-π
  21. Γ                                            φ; ta un programa                  π
  22. Γ                        JZ      InfectaPrograma      φ; Queda claro, ¿no?      π
  23. Γ                        IRET                                                   π
  24. Γ                                           φ; Es así más o menos.              π
  25.  
  26.         Esto, simplemente, ya revela la voluntad del programa en capturar la
  27. ejecución de programas para su infección. Pero, haciendo lo siguiente, se hace
  28. lo mismo:
  29.  
  30. ΓNuevaInt21h:            CMP     AH, 4Chπ
  31. Γ                        JAE     FinInterrupcionπ
  32. Γ                        CMP     AH, 4Ah         π
  33. Γ                        JBE     FinInterrupcion π
  34. Γ                        OR      AL, AL          π
  35. Γ                        JZ      InfectaPrograma π
  36. ΓFinInterrupcion:        IRET                    π
  37.  
  38. ΓInfectaPrograma:        ...π
  39.  
  40.  
  41.         Esto hace exactamente lo mismo que el primer ejemplo, nada mas que,
  42. por comprobación indirecta... ¡logramos evitar el flag! (sí, sí, ya sé que
  43. ocupa más espacio, pero compensa una cosa por otra).
  44.  
  45.         Otro flag bastante importante es el de la diferenciación en un archivo
  46. si es δ.COMπ o δ.EXEπ. Un virus lo hace leyendo los 2 primeros bytes y mirando si
  47. son 'δMZπ' o 'δZMπ' (inicio de una cabecera de EXE). Podríais decir: "¿Y qué tal
  48. si se hace mirando el nombre del archivo?". Esto conlleva problemas, sobre to-
  49. do por el propio ΩDOSπ: el DOS no mira la extensión al ejecutar, sino estos dos
  50. primeros bytes, así que podremos tener un δ.COMπ renombrado a δ.EXEπ y viceversa.
  51. Por tanto es más seguro hacer lo de siempre.
  52.  
  53.         El δThunderByteπ, ante esta técnica, nos marcará el flag 'δZπ'. Y la solu-
  54. ción es bien fácil: comprobación indirecta (¿os suena?). Hay un montón de ma-
  55. neras de hacer lo mismo sin que sea tan obvio nuestro objetivo. Este es sólo
  56. un ejemplo. Esta sería la manera habitual:
  57.  
  58. Γ                        CMP     WORD PTR [LosDosPrimerosBytes], 'MZ'π
  59. Γ                        JZ      EsunEXE                             π
  60. Γ                        CMP     WORD PTR [LosDosPrimerosBytes], 'ZM'π
  61. Γ                        JZ      EsunEXE                             π
  62. Γ            EsunCOM:    ...                                         π
  63.  
  64.         Y esta es una manera alternativa que evita la activación del flag:
  65.  
  66. Γ                        MOV     AX, [LosDosPrimerosBytes]π
  67. Γ                        XOR     AX, 'MZ'    φ; Un XOR dejará a 0 AX si éste esπ
  68.                                             φ; 'MZ'                            π
  69. Γ                        JZ      EsunEXE                                      π
  70. Γ                        CMP     AX, 1717h   φ; Si fuera 'ZM', hacer una opera-π
  71.                                             φ; ción 'ZM' XOR 'MZ' da el valor  π
  72.                                             φ; 1717h                           π
  73. Γ                        JZ      EsunEXEπ                                     
  74. Γ            EsunCOM:    ...π                                                 
  75.  
  76.         Creo que la idea está captada, ¿no? Se trata de buscar otra manera de
  77. poner lo mismo, investigando y probando hasta que todos los flags compromete-
  78. dores desaparezcan. Ahora una lista de los flags más comunes y a qué son de-
  79. bidos:
  80.  
  81. ΩFlag    τDescripcionπ
  82. Ω----    τ-----------π
  83.  
  84. δZ φ-->  ∩ El programa diferencia entre EXE y COM.π
  85.  
  86.         Θ- Causa:π Instrucciones  CMP XXX, 'MZ'   ó   CMP XXX, 'ZM'
  87.  
  88. δL φ-->  ∩ El programa captura la ejecución de software.π
  89.  
  90.         Θ- Causa:π Instrucción  CMP AH, 4Bh  ó  CMP AX, 4BXXh
  91.  
  92. δM φ-->  ∩ El programa tiene código para quedarse residente en memoria.π
  93.  
  94.         Θ- Causa:π Instrucciones de enganche de interrupciones por medio de la
  95.                  función 25h de la interrupción 21h o manipulaciones directas
  96.                  de la TVI (Tabla de Vectores de Interrupción).
  97.  
  98. δA φ-->  ∩ Reserva de memoria sospechosa o no standardπ
  99.  
  100.         Θ- Causa:π Instrucciones habituales de instalación por MCBs, que se ha
  101.                  convertido en el "standard" de los virus. Por ligeras varia-
  102.                  ciones en estas instrucciones, se puede evitar el flag.
  103.  
  104. δO φ-->  ∩ Existe código para sobreescribir/mover un programa en memoria.π
  105.  
  106.         Θ- Causa:π Instrucción REP MOVSB/MOVSW o reiteración exagerada de movi-
  107.                  mientos de valores a memoria.
  108.  
  109. δ# φ-->  ∩ Rutina de desencriptado o trampa para debuggers.π
  110.  
  111.         Θ- Causa:π Código para desencriptar. El ThunderByte capta multitud de
  112.                  variaciones entre desencriptadores y no es fácil evitar este
  113.                  flag.
  114.  
  115. δt φ-->  ∩ Código para ser ejecutado en un tiempo concreto (día u hora).π
  116.  
  117.         Θ- Causa:π Llamada a las funciones 02 ó 04 de la int. 1Ah. Llamada a las
  118.                  funciones 2Ah ó 2Ch de la int. 21h.
  119.  
  120. δT φ-->  ∩ Tiempo incorrecto en el archivo.π
  121.  
  122.         Θ- Causa:π Segundos en el archivo a 60-62 o años con 100 más de los co-
  123.                  rrectos.
  124.  
  125. δB φ-->  ∩ Vuelta al punto de entrada después de modificaciones en él.π
  126.  
  127.         Θ- Causa:π La instrucciones habituales de sobreescribir los tres bytes
  128.                  iniciales con el código original, que en un COM infectado
  129.                  ocupa el JMP inicial al código del virus.
  130.  
  131. δF φ-->  ∩ Acceso sospechoso a archivo.π
  132.  
  133.         Θ- Causa:π Llamada pura y dura a la función 40h de la int. 21h y apertu-
  134.                  ra por medio de la función 3D02h de la int. 21h.
  135.                  
  136. δU φ-->  ∩ Llamada a una función o interrupción indocumentada.π
  137.  
  138.         Θ- Causa:π Ello mismo. Instrucciones como INT 7Ah, o la función 0FEh de
  139.                  la int. 21h, etc. 
  140.  
  141. δS φ-->  ∩ Rutina de búsqueda de ejecutables.π
  142.  
  143.         Θ- Causa:π Llamada a las funciones 4Eh y 4Fh de la int. 21h con DX apun-
  144.                  tando a la cadena '*.EXE' o '*.COM', o simplemente estas ca-
  145.                  denas.
  146.  
  147. δX φ-->  ∩ Capacidades stealth.π
  148.  
  149.         Θ- Causa:π Exactamente, las instrucciones "CMP AH,11h", "CMP AH,12h",
  150.                  "CMP AH, 4Eh" y "CMP AH, 4Fh", así como los pares de instruc-
  151.                  ciones "SUB WORD PTR [Dir], Val / SBB WORD PTR [Dir+2], +00".
  152.  
  153.  
  154.         Bien, y aquí se acaba por este número (que ya es bastante, co*o*es).
  155. Al próximo, más... ¿y qué veremos en el próximo número? Pues no lo sé, ya se
  156. me ocurrirá algo.                    
  157.  
  158.                                                 ∞Líyak el Oscuroπ
  159.